{
    interface MyArray<T> {
        length: number,
        push(n: T):void,
        pop?():T,
        reverse?():T[]
      }

    let arr1:MyArray<number> = {
        length:1,
        push:(n:number)=>void {}
    }

    let arr2:MyArray<string> = {
        length:1,
        push:(n:string)=>void {}
    }

    arr1.push(1)
    arr2.push('1')

    let ar1 = new Array('abc')
    let ar2 = new Array(1)
}